package com.louis.kitty.admin.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.louis.kitty.admin.sevice.SysLogService;
import com.louis.kitty.core.http.HttpResult;
import com.louis.kitty.core.page.PageRequest;

/**
 * 日志控制器
 */

/**
 * 知识点1：
 * @RestController 是Spring框架提供的注解。（Spring4.0之后新增的）
 * @RestController = @Controller+@ResponseBody
 * @ResponseBody 告诉控制器返回对象会被自动序列化成JSON，并且传回HttpResponse这个对象
 *
 * 知识点2：
 * RequestMapping
 * 作用：指定路由映射的
 *
 * 知识点3：
 * @RequestBody
 * 作用：把HttpRequest body映射成一个 transfer or domain object（DTO或者DO），
 * 把一个入境（inbound）的HttpRequest的body反序列化成一个Java对象。
 *
 * 知识点4：
 * @PostMapping
 * 是一个复合注解，Spring framework 4.3引入了@RequestMapping注释的变体，以更好地表示带注释的方法的语义
 * 作为@RequestMapping(method = RequestMethod.POST)的快捷方式。
 * 也就是可以简化成@PostMapping(value="/abc" )即可，主要是方便识记
 *
 * 知识点5：
 * 当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候，@PreAuthorize可以使用
 * @PreAuthorize 可以用来控制一个方法是否能够被调用。
 * @在controller 层方法中添加权限配置(符合条件得才可以调用这个方法)
 *
 */
@Api(tags = "日志控制器类",value = "日志控制器")
@RestController
@RequestMapping("log")
public class SysLogController {

	@Autowired
	private SysLogService sysLogService;

	@ApiOperation(value = "日志查询方法" ,notes = "做了权限控制，具有日志查看权限的人具有有该方法的权限")
	@PreAuthorize("hasAuthority('sys:log:view')")
	@PostMapping(value="/findPage",name = "查询日志")
	public HttpResult findPage(@RequestBody PageRequest pageRequest) {
		return HttpResult.ok(sysLogService.findPage(pageRequest));
	}
}
